草庐IT

ios - RubyMotion 和指针

全部标签

c++ - 使用 ios_base::register_callback() 和 ios_base::event 检测流关闭

我有一个返回unique_ptr的API给API用户。我想知道用户何时完成此流,以便我可以对他们刚刚写入的文件采取进一步的操作。必须关闭该文件,因为即将重新挂载分区。这可能是这个问题的错误解决方案,但就在我返回流之前,我用register_callback()注册了一个回调。:std::unique_ptros(newstd::ofstream(name,std::ofstream::out|std::ofstream::trunc|std::ofstream::binary));os->register_callback(done_callback,0);returnos;回调在别处

c++ - 如何从 Clang 中的 CallExpr 获取函数指针的参数?

我正在尝试分析其中包含函数调用的C源代码。我能够使用下面的源代码分析正常的函数调用以毫无问题地获取它们的参数,其中ce是一个CallExpr对象:1.if(ce!=NULL){2.QualTypeq=ce->getType();3.constType*t=q.getTypePtrOrNull();4.5.if(t!=NULL){6.llvm::errs()isFunctionPointerType()isPointerType()getCalleeDecl();13.while(D->getPreviousDecl()!=NULL)14.D=D->getPreviousDecl();1

c++ - 释放存储在 std::queue 中的堆指针

考虑这段代码:classFoo;std:queueq;//allocateandaddobjectstothequeuefor(inti=0;i通过单步执行,我可以看到Foo析构函数在每个对象被删除时被调用,所以我希望进程内存使用量会随着每次删除发生而下降-但事实并非如此。在我的应用程序中,队列用于生产者/消费者线程,内存使用量一直在增长。我发现恢复内存的唯一方法是在我从队列中弹出所有项目时将队列交换为空队列:q.swap(std::queue());如果我使用vector而不是队列,删除存储的对象会立即降低进程内存使用量。任何人都可以解释为什么队列不是那样的吗?编辑以从评论中澄清:我

java - iOS 上的 UnsatisfiedLinkError 而不是 Android,loadLibrary 总是成功

我有一些Java和C++代码,我可以在这两个平台上编译它们并构建native库。我可以验证这些库是否包含我期望的功能,并且Java能够在Android和iOS上加载这些库。在Android上一切顺利,没有崩溃,但在iOS上我遇到了一个非常令人沮丧的错误:2015-05-1111:34:48.418IOSLauncher[52454:851038][info]test:initializingnativelibraries...2015-05-1111:34:48.418IOSLauncher[52454:851038][info]test:librarypathsetto:"/User

c++ - 为什么 UuidFromString 函数请求非常量指针指向 unsigned char?

我不知道为什么UuidFromString函数需要非常量指向无符号字符的指针。为什么不用constchar*代替呢?我的想法是不需要修改第一个参数所指出的数据。 最佳答案 UuidFromString专为COM/DCOM而设计。unsignedchar是为了防止需要检查负数char值(默认char是signed,这意味着值的范围是[-128,127]-因为这个字符串应该是ANSI字符,这是避免条件检查的一种廉价方法)。它的姊妹函数(UuidToString)确实需要一个const输入参数。我在文档中看不到关于为什么UuidFromS

c++ - 指向多次实例化的函数模板的指针

我有一个与函数模板相关的简单问题。假设我有一个header,其中包含一个带有名为f的模板方法的类:classtest{public:templatevoidf(Tt){}};如果此header包含在多个.cpp文件中,并且这些.cpp中的每一个都使用相同的类型(假设为int)调用f,我可以在其他地方获取函数的指针吗代码?考虑到可能有多个定义,链接器会只保留一个吗? 最佳答案 Ifthisheaderisincludedinseveral.cppfiles,andeachofthese.cppcallsfwiththesametype

c++ - 指向引用的指针的非空比较警告

我写了下面的代码:voidfoo(int&x){boolb1=(&x)==nullptr;boolb2=&x==nullptr;int*ptr=&x;boolb3=ptr==nullptr;}对于上面的代码,我遇到了以下错误:对于b1变量:test.cpp:5:21:warning:nonnullargument‘x’comparedtoNULL[-Wnonnull-compare]对于b2变量:test.cpp:6:19:warning:thecompilercanassumethattheaddressof‘x’willneverbeNULL[-Waddress]test.cpp:

c++ - 数组衰减到指针和重载解析

我希望能够在重载决策中区分数组和指针:classstring{public:string(constchar*c_str);templatestring(constchar(&str)[N]);};intmain(){constchar*c_str="foo";stringfoo(c_str);//okwillcallstring(constchar*)stringbar("bar");//callstring(constchar*)insteadofthearrayversion}到目前为止我发现的最好的方法是使用对指针的引用而不是指针:classstring{public:stri

c++ - 为什么指针衰减优先于推导的模板?

假设我正在编写一个函数来打印字符串的长度:templatevoidfoo(constchar(&s)[N]){std::cout现在我想扩展foo以支持非数组:voidfoo(constchar*s){std::cout但事实证明这打破了我最初的预期用途:foo("hello")//nowprintsraw,size=5为什么?这不需要数组到指针的转换,而模板是完全匹配的吗?有没有办法确保我的数组函数被调用? 最佳答案 这种(符合标准的)歧义的根本原因似乎在于转换成本:重载解析试图最小化将参数转换为相应参数所执行的操作。数组实际上是

c++ - 如何组合 lambda、可变参数函数和函数指针?

我有一个好主意,可以(对我而言)简化很多事情。假设您有一个函数,它接受一个带有x个参数的函数,如果事件发生,该函数将被执行。为了简化这一点,您使用typedef定义了一个新类型,即函数指针。typedefvoid(*HandlerFunction)(...);voidsetHandler(HandlerFunctionfun){...}现在您使用setHandler函数来...使用带有额外特定参数的lambda函数设置处理程序,因为您知道将始终使用这些特定参数调用此函数。setHandler([](inti,std::stringarg){std::cout现在的问题是……这在C++中